﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using SGAEntidades;
using SGABDUtil;
using SGAInterfaces;

namespace SGAAccesoDatos
{
    public class Empleado : IEmpleado
    {
        #region Miembros de IEmpleado

        public IList<EmpleadoInfo> Listar(EmpleadoInfo oEmpleado)
        {
            var sqlParm = new SqlParameter[4];
            var oListaEmpleado = new List<EmpleadoInfo>();

            sqlParm[0] = new SqlParameter("@Id_Empleado", SqlDbType.VarChar);
            if (oEmpleado.IdEmpleado != null) { sqlParm[0].Value = oEmpleado.IdEmpleado; } else { sqlParm[0].Value = DBNull.Value; }

            sqlParm[1] = new SqlParameter("@Nombre", SqlDbType.VarChar);
            if (oEmpleado.Nombre != null) { sqlParm[1].Value = oEmpleado.Nombre; } else { sqlParm[1].Value = DBNull.Value; }

            sqlParm[2] = new SqlParameter("@Id_Area", SqlDbType.VarChar);
            if (oEmpleado.IdArea != null) { sqlParm[2].Value = oEmpleado.IdArea; } else { sqlParm[2].Value = DBNull.Value; }

            sqlParm[3] = new SqlParameter("@Id_Local", SqlDbType.VarChar);
            if (oEmpleado.IdLocal != null) { sqlParm[3].Value = oEmpleado.IdLocal; } else { sqlParm[3].Value = DBNull.Value; }

            using (
                var drd = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringDistributedTransaction,
                                                  CommandType.StoredProcedure, "SGA_SP_CONSULTAR_EMPLEADO", sqlParm))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        while (drd.Read())
                        {
                            oListaEmpleado.Add(new EmpleadoInfo(drd.GetString(0).Trim(), drd.GetString(1).Trim(),
                                drd.GetString(2).Trim(), new AreaEmpleadoInfo(drd.GetString(2).Trim(), drd.GetString(3).Trim(), null),
                                drd.GetString(4).Trim(), new LocalInfo(drd.GetString(4).Trim(), drd.GetString(5).Trim(), null)));
                        }
                    }
                }
            }
            return oListaEmpleado;
        }

        public EmpleadoInfo Consultar(EmpleadoInfo oEmpleado)
        {
            var sqlParm = new SqlParameter[4];
            var oEntEmpleado = new EmpleadoInfo();

            sqlParm[0] = new SqlParameter("@Id_Empleado", SqlDbType.VarChar);
            if (oEmpleado.IdEmpleado != null) { sqlParm[0].Value = oEmpleado.IdEmpleado; } else { sqlParm[0].Value = DBNull.Value; }

            sqlParm[1] = new SqlParameter("@Nombre", SqlDbType.VarChar);
            if (oEmpleado.Nombre != null) { sqlParm[1].Value = oEmpleado.Nombre; } else { sqlParm[1].Value = DBNull.Value; }

            sqlParm[2] = new SqlParameter("@Id_Area", SqlDbType.VarChar);
            if (oEmpleado.IdArea != null) { sqlParm[2].Value = oEmpleado.IdArea; } else { sqlParm[2].Value = DBNull.Value; }

            sqlParm[3] = new SqlParameter("@Id_Local", SqlDbType.VarChar);
            if (oEmpleado.IdLocal != null) { sqlParm[3].Value = oEmpleado.IdLocal; } else { sqlParm[3].Value = DBNull.Value; }

            using (
                var drd = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringDistributedTransaction,
                                                  CommandType.StoredProcedure, "SGA_SP_CONSULTAR_EMPLEADO", sqlParm))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        drd.Read();

                        oEntEmpleado = new EmpleadoInfo(drd.GetString(0).Trim(), drd.GetString(1).Trim(),
                            drd.GetString(2).Trim(), new AreaEmpleadoInfo(drd.GetString(2).Trim(), drd.GetString(3).Trim(), null),
                            drd.GetString(4).Trim(), new LocalInfo(drd.GetString(4).Trim(), drd.GetString(5).Trim(), null));

                    }
                }
            }
            return oEntEmpleado;
        }

        #endregion
    }
}
